package main

import (
	"fmt"
	"strings"
)

func main() {
	v := convertString(1994)
	fmt.Println(v)
	v1 := convertInt2(v)
	fmt.Println(v1)
}

func convertString(target int) string {
	var result []string
	c := []string{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "VI", "V", "IV", "I"}
	v := []int{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}
	for target > 0 {
		for i := 0; i < len(v); i++ {
			if target >= v[i] {
				target = target - v[i]
				result = append(result, c[i])
				continue
			}
		}
	}

	return strings.Join(result, "")
}

// 观察规律发现的
func convertInt2(s string) int {
	data := map[string]int{
		"M": 1000,
		"D": 500,
		"C": 100,
		"L": 50,
		"X": 10,
		"V": 5,
		"I": 1,
	}
	r := 0
	l := len(s)
	for i := 0; i < l; i++ {
		v := data[fmt.Sprintf("%c", s[i])]
		if i < l-1 && v < data[fmt.Sprintf("%c", s[i+1])] {
			r -= v
		} else {
			r += v
		}
	}

	return r
}

// 直接编写
func convertInt(s string) int {
	data := map[string]int{
		"M": 1000,
		"D": 500,
		"C": 100,
		"L": 50,
		"X": 10,
		"V": 5,
		"I": 1,
	}

	r := 0
	for i := 0; i < len(s); {
		if i < len(s)-1 {
			if s[i] == 'I' {
				if s[i+1] == 'V' {
					r += 4
					i += 2
				} else if s[i+1] == 'X' {
					r += 9
					i += 2
				} else {
					r += 1
					i += 1
				}
			} else if s[i] == 'X' {
				if s[i+1] == 'L' {
					r += 40
					i += 2
				} else if s[i+1] == 'C' {
					r += 90
					i += 2
				} else {
					r += 10
					i += 1
				}
			} else if s[i] == 'C' {
				if s[i+1] == 'D' {
					r += 400
					i += 2
				} else if s[i+1] == 'M' {
					r += 900
					i += 2
				} else {
					r += 100
					i += 1
				}
			} else {
				r += data[fmt.Sprintf("%c", s[i])]
				i += 1
			}
		} else {
			r += data[fmt.Sprintf("%c", s[len(s)-1])]
			break
		}
	}
	return r
}
